const app = getApp();

Page({
  data: {
    isLoggingIn: false,
    WXcode: ""
  },

  wechatLogin(e) {
    const role = e.currentTarget.dataset.role;

    if (this.data.isLoggingIn) return;

    this.setData({ isLoggingIn: true });

    wx.login({
      success: res => {
        if (res.code) {
          this.data.WXcode = res.code;
          const loginUrl = role === 'user' ? '/login/user' : '/login/admin';

          // 显示加载提示：只显示一次
          wx.showLoading({
            title: '正在登录...',
            mask: true
          });

          // 开始请求，并传入最大重试次数
          this.sendLoginRequest(loginUrl, role, 100, (successRes) => {
            // 成功回调
            wx.hideLoading(); // 登录成功，隐藏 loading
            if (successRes.statusCode === 200) {
              const token = successRes.data.token;
              const redirectUrl = role === 'user'
                ? '/pages/user/UserHomeView/UserHomeView'
                : '/pages/admin/AdminHomeView/AdminHomeView';

              if (role === 'user') {
                app.globalData.token = token;
                wx.setStorageSync('token', token);
              } else {
                app.globalData.adminToken = token;
                wx.setStorageSync('adminToken', token);
              }

              wx.reLaunch({ url: redirectUrl });
            } else {
              wx.showToast({ title: '登录失败，请重试', icon: 'none' });
            }
          }, () => {
            // 最终失败回调
            wx.hideLoading(); // 所有重试失败后隐藏 loading
            wx.showToast({ title: '网络错误，登录失败', icon: 'none' });
          });

        } else {
          console.error('获取用户登录态失败:', res.errMsg);
          wx.showToast({ title: '登录失败，请重试', icon: 'none' });
        }

        this.setData({ isLoggingIn: false });
      },
      fail: () => {
        this.setData({ isLoggingIn: false });
        wx.showToast({ title: '微信登录失败', icon: 'none' });
      }
    });
  },

  /**
   * 发送登录请求并支持重试
   * @param {string} loginUrl 请求地址
   * @param {string} role 用户/管理员角色
   * @param {number} retryCount 剩余重试次数
   * @param {function} onSuccess 成功回调
   * @param {function} onFail 最终失败回调
   */
  sendLoginRequest(loginUrl, role, retryCount, onSuccess, onFail) {
    const app = getApp();

    wx.request({
      url: `${app.globalData.apiUrl}${loginUrl}`,
      method: 'POST',
      data: {
        code: this.data.WXcode
      },
      success: (response) => {
        this.setData({ isLoggingIn: false });
        onSuccess(response); // 成功直接返回
      },
      fail: () => {
        if (retryCount > 0) {
          // 继续重试
          setTimeout(() => {
            this.sendLoginRequest(loginUrl, role, retryCount - 1, onSuccess, onFail);
          }, 10); // 10ms 重试间隔
        } else {
          onFail(); // 所有重试失败后触发
        }
      }
    });
  }
});